

package com.hazelcast.map.impl;

import com.hazelcast.internal.serialization.Data;
import com.hazelcast.internal.serialization.InternalSerializationService;
import com.hazelcast.map.LockAware;
import com.hazelcast.query.impl.getters.Extractors;

import java.io.Serial;

/**
 * Specialization of the LazyMapEntry that is LockAware. Used in
 * EntryProcessor. If serialized the locked property will be nullified,
 * since it's volatile and valid only when on partition-thread.
 */
public class LockAwareLazyMapEntry extends LazyMapEntry implements LockAware {

    @Serial
    private static final long serialVersionUID = 0L;

    // not to be serialized, if serialized should return null
    private transient Boolean locked;

    public LockAwareLazyMapEntry() {
    }

    public LockAwareLazyMapEntry(Data key, Object value, InternalSerializationService serializationService, Extractors extractors, Boolean locked) {
        super(key, value, serializationService, extractors);
        this.locked = locked;
    }

    public LockAwareLazyMapEntry init(InternalSerializationService serializationService, Data key, Object value, Extractors extractors, Boolean locked, long ttl, boolean changeExpiryOnUpdate) {
        super.init(serializationService, key, value, extractors, ttl, changeExpiryOnUpdate);
        this.locked = locked;
        return this;
    }

    @Override
    public Boolean isLocked() {
        return locked;
    }

    @Override
    public int getFactoryId() {
        return MapDataSerializerHook.F_ID;
    }

    @Override
    public int getClassId() {
        return MapDataSerializerHook.LOCK_AWARE_LAZY_MAP_ENTRY;
    }

}
